// This code is derived from jcifs smb client library <jcifs at samba dot org>
// Ported by J. Arturo <webmaster at komodosoft dot net>
//  
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
// 
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
// 
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
using SharpCifs.Dcerpc.Ndr;

namespace SharpCifs.Dcerpc.Msrpc
{
	public class Srvsvc
	{
		public static string GetSyntax()
		{
			return "4b324fc8-1670-01d3-1278-5a47bf6ee188:3.0";
		}

		public class ShareInfo0 : NdrObject
		{
			public string Netname;

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Encode(NdrBuffer dst)
			{
				dst.Align(4);
				dst.Enc_ndr_referent(Netname, 1);
				if (Netname != null)
				{
					dst = dst.Deferred;
					dst.Enc_ndr_string(Netname);
				}
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Decode(NdrBuffer src)
			{
				src.Align(4);
				int netnamep = src.Dec_ndr_long();
				if (netnamep != 0)
				{
					src = src.Deferred;
					Netname = src.Dec_ndr_string();
				}
			}
		}

		public class ShareInfoCtr0 : NdrObject
		{
			public int Count;

			public ShareInfo0[] Array;

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Encode(NdrBuffer dst)
			{
				dst.Align(4);
				dst.Enc_ndr_long(Count);
				dst.Enc_ndr_referent(Array, 1);
				if (Array != null)
				{
					dst = dst.Deferred;
					int arrays = Count;
					dst.Enc_ndr_long(arrays);
					int arrayi = dst.Index;
					dst.Advance(4 * arrays);
					dst = dst.Derive(arrayi);
					for (int i = 0; i < arrays; i++)
					{
						Array[i].Encode(dst);
					}
				}
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Decode(NdrBuffer src)
			{
				src.Align(4);
				Count = src.Dec_ndr_long();
				int arrayp = src.Dec_ndr_long();
				if (arrayp != 0)
				{
					src = src.Deferred;
					int arrays = src.Dec_ndr_long();
					int arrayi = src.Index;
					src.Advance(4 * arrays);
					if (Array == null)
					{
						if (arrays < 0 || arrays > unchecked(0xFFFF))
						{
							throw new NdrException(NdrException.InvalidConformance);
						}
						Array = new ShareInfo0[arrays];
					}
					src = src.Derive(arrayi);
					for (int i = 0; i < arrays; i++)
					{
						if (Array[i] == null)
						{
							Array[i] = new ShareInfo0();
						}
						Array[i].Decode(src);
					}
				}
			}
		}

		public class ShareInfo1 : NdrObject
		{
			public string Netname;

			public int Type;

			public string Remark;

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Encode(NdrBuffer dst)
			{
				dst.Align(4);
				dst.Enc_ndr_referent(Netname, 1);
				dst.Enc_ndr_long(Type);
				dst.Enc_ndr_referent(Remark, 1);
				if (Netname != null)
				{
					dst = dst.Deferred;
					dst.Enc_ndr_string(Netname);
				}
				if (Remark != null)
				{
					dst = dst.Deferred;
					dst.Enc_ndr_string(Remark);
				}
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Decode(NdrBuffer src)
			{
				src.Align(4);
				int netnamep = src.Dec_ndr_long();
				Type = src.Dec_ndr_long();
				int remarkp = src.Dec_ndr_long();
				if (netnamep != 0)
				{
					src = src.Deferred;
					Netname = src.Dec_ndr_string();
				}
				if (remarkp != 0)
				{
					src = src.Deferred;
					Remark = src.Dec_ndr_string();
				}
			}
		}

		public class ShareInfoCtr1 : NdrObject
		{
			public int Count;

			public ShareInfo1[] Array;

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Encode(NdrBuffer dst)
			{
				dst.Align(4);
				dst.Enc_ndr_long(Count);
				dst.Enc_ndr_referent(Array, 1);
				if (Array != null)
				{
					dst = dst.Deferred;
					int arrays = Count;
					dst.Enc_ndr_long(arrays);
					int arrayi = dst.Index;
					dst.Advance(12 * arrays);
					dst = dst.Derive(arrayi);
					for (int i = 0; i < arrays; i++)
					{
						Array[i].Encode(dst);
					}
				}
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Decode(NdrBuffer src)
			{
				src.Align(4);
				Count = src.Dec_ndr_long();
				int arrayp = src.Dec_ndr_long();
				if (arrayp != 0)
				{
					src = src.Deferred;
					int arrays = src.Dec_ndr_long();
					int arrayi = src.Index;
					src.Advance(12 * arrays);
					if (Array == null)
					{
						if (arrays < 0 || arrays > unchecked(0xFFFF))
						{
							throw new NdrException(NdrException.InvalidConformance);
						}
						Array = new ShareInfo1[arrays];
					}
					src = src.Derive(arrayi);
					for (int i = 0; i < arrays; i++)
					{
						if (Array[i] == null)
						{
							Array[i] = new ShareInfo1();
						}
						Array[i].Decode(src);
					}
				}
			}
		}

		public class ShareInfo502 : NdrObject
		{
			public string Netname;

			public int Type;

			public string Remark;

			public int Permissions;

			public int MaxUses;

			public int CurrentUses;

			public string Path;

			public string Password;

			public int SdSize;

			public byte[] SecurityDescriptor;

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Encode(NdrBuffer dst)
			{
				dst.Align(4);
				dst.Enc_ndr_referent(Netname, 1);
				dst.Enc_ndr_long(Type);
				dst.Enc_ndr_referent(Remark, 1);
				dst.Enc_ndr_long(Permissions);
				dst.Enc_ndr_long(MaxUses);
				dst.Enc_ndr_long(CurrentUses);
				dst.Enc_ndr_referent(Path, 1);
				dst.Enc_ndr_referent(Password, 1);
				dst.Enc_ndr_long(SdSize);
				dst.Enc_ndr_referent(SecurityDescriptor, 1);
				if (Netname != null)
				{
					dst = dst.Deferred;
					dst.Enc_ndr_string(Netname);
				}
				if (Remark != null)
				{
					dst = dst.Deferred;
					dst.Enc_ndr_string(Remark);
				}
				if (Path != null)
				{
					dst = dst.Deferred;
					dst.Enc_ndr_string(Path);
				}
				if (Password != null)
				{
					dst = dst.Deferred;
					dst.Enc_ndr_string(Password);
				}
				if (SecurityDescriptor != null)
				{
					dst = dst.Deferred;
					int securityDescriptors = SdSize;
					dst.Enc_ndr_long(securityDescriptors);
					int securityDescriptori = dst.Index;
					dst.Advance(1 * securityDescriptors);
					dst = dst.Derive(securityDescriptori);
					for (int i = 0; i < securityDescriptors; i++)
					{
						dst.Enc_ndr_small(SecurityDescriptor[i]);
					}
				}
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Decode(NdrBuffer src)
			{
				src.Align(4);
				int netnamep = src.Dec_ndr_long();
				Type = src.Dec_ndr_long();
				int remarkp = src.Dec_ndr_long();
				Permissions = src.Dec_ndr_long();
				MaxUses = src.Dec_ndr_long();
				CurrentUses = src.Dec_ndr_long();
				int pathp = src.Dec_ndr_long();
				int passwordp = src.Dec_ndr_long();
				SdSize = src.Dec_ndr_long();
				int securityDescriptorp = src.Dec_ndr_long();
				if (netnamep != 0)
				{
					src = src.Deferred;
					Netname = src.Dec_ndr_string();
				}
				if (remarkp != 0)
				{
					src = src.Deferred;
					Remark = src.Dec_ndr_string();
				}
				if (pathp != 0)
				{
					src = src.Deferred;
					Path = src.Dec_ndr_string();
				}
				if (passwordp != 0)
				{
					src = src.Deferred;
					Password = src.Dec_ndr_string();
				}
				if (securityDescriptorp != 0)
				{
					src = src.Deferred;
					int securityDescriptors = src.Dec_ndr_long();
					int securityDescriptori = src.Index;
					src.Advance(1 * securityDescriptors);
					if (SecurityDescriptor == null)
					{
						if (securityDescriptors < 0 || securityDescriptors > unchecked(0xFFFF))
						{
							throw new NdrException(NdrException.InvalidConformance);
						}
						SecurityDescriptor = new byte[securityDescriptors];
					}
					src = src.Derive(securityDescriptori);
					for (int i = 0; i < securityDescriptors; i++)
					{
						SecurityDescriptor[i] = unchecked((byte)src.Dec_ndr_small());
					}
				}
			}
		}

		public class ShareInfoCtr502 : NdrObject
		{
			public int Count;

			public ShareInfo502[] Array;

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Encode(NdrBuffer dst)
			{
				dst.Align(4);
				dst.Enc_ndr_long(Count);
				dst.Enc_ndr_referent(Array, 1);
				if (Array != null)
				{
					dst = dst.Deferred;
					int arrays = Count;
					dst.Enc_ndr_long(arrays);
					int arrayi = dst.Index;
					dst.Advance(40 * arrays);
					dst = dst.Derive(arrayi);
					for (int i = 0; i < arrays; i++)
					{
						Array[i].Encode(dst);
					}
				}
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Decode(NdrBuffer src)
			{
				src.Align(4);
				Count = src.Dec_ndr_long();
				int arrayp = src.Dec_ndr_long();
				if (arrayp != 0)
				{
					src = src.Deferred;
					int arrays = src.Dec_ndr_long();
					int arrayi = src.Index;
					src.Advance(40 * arrays);
					if (Array == null)
					{
						if (arrays < 0 || arrays > unchecked(0xFFFF))
						{
							throw new NdrException(NdrException.InvalidConformance);
						}
						Array = new ShareInfo502[arrays];
					}
					src = src.Derive(arrayi);
					for (int i = 0; i < arrays; i++)
					{
						if (Array[i] == null)
						{
							Array[i] = new ShareInfo502();
						}
						Array[i].Decode(src);
					}
				}
			}
		}

		public class ShareEnumAll : DcerpcMessage
		{
			public override int GetOpnum()
			{
				return unchecked(0x0f);
			}

			public int Retval;

			public string Servername;

			public int Level;

			public NdrObject Info;

			public int Prefmaxlen;

			public int Totalentries;

			public int ResumeHandle;

			public ShareEnumAll(string servername, int level, NdrObject info, int prefmaxlen, 
				int totalentries, int resumeHandle)
			{
				this.Servername = servername;
				this.Level = level;
				this.Info = info;
				this.Prefmaxlen = prefmaxlen;
				this.Totalentries = totalentries;
				this.ResumeHandle = resumeHandle;
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Encode_in(NdrBuffer dst)
			{
				dst.Enc_ndr_referent(Servername, 1);
				if (Servername != null)
				{
					dst.Enc_ndr_string(Servername);
				}
				dst.Enc_ndr_long(Level);
				int descr = Level;
				dst.Enc_ndr_long(descr);
				dst.Enc_ndr_referent(Info, 1);
				if (Info != null)
				{
					dst = dst.Deferred;
					Info.Encode(dst);
				}
				dst.Enc_ndr_long(Prefmaxlen);
				dst.Enc_ndr_long(ResumeHandle);
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Decode_out(NdrBuffer src)
			{
				Level = src.Dec_ndr_long();
				src.Dec_ndr_long();
				int infop = src.Dec_ndr_long();
				if (infop != 0)
				{
					if (Info == null)
					{
						Info = new ShareInfoCtr0();
					}
					src = src.Deferred;
					Info.Decode(src);
				}
				Totalentries = src.Dec_ndr_long();
				ResumeHandle = src.Dec_ndr_long();
				Retval = src.Dec_ndr_long();
			}
		}

		public class ShareGetInfo : DcerpcMessage
		{
			public override int GetOpnum()
			{
				return unchecked(0x10);
			}

			public int Retval;

			public string Servername;

			public string Sharename;

			public int Level;

			public NdrObject Info;

			public ShareGetInfo(string servername, string sharename, int level, NdrObject info
				)
			{
				this.Servername = servername;
				this.Sharename = sharename;
				this.Level = level;
				this.Info = info;
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Encode_in(NdrBuffer dst)
			{
				dst.Enc_ndr_referent(Servername, 1);
				if (Servername != null)
				{
					dst.Enc_ndr_string(Servername);
				}
				dst.Enc_ndr_string(Sharename);
				dst.Enc_ndr_long(Level);
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Decode_out(NdrBuffer src)
			{
				src.Dec_ndr_long();
				int infop = src.Dec_ndr_long();
				if (infop != 0)
				{
					if (Info == null)
					{
						Info = new ShareInfo0();
					}
					src = src.Deferred;
					Info.Decode(src);
				}
				Retval = src.Dec_ndr_long();
			}
		}

		public class ServerInfo100 : NdrObject
		{
			public int PlatformId;

			public string Name;

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Encode(NdrBuffer dst)
			{
				dst.Align(4);
				dst.Enc_ndr_long(PlatformId);
				dst.Enc_ndr_referent(Name, 1);
				if (Name != null)
				{
					dst = dst.Deferred;
					dst.Enc_ndr_string(Name);
				}
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Decode(NdrBuffer src)
			{
				src.Align(4);
				PlatformId = src.Dec_ndr_long();
				int namep = src.Dec_ndr_long();
				if (namep != 0)
				{
					src = src.Deferred;
					Name = src.Dec_ndr_string();
				}
			}
		}

		public class ServerGetInfo : DcerpcMessage
		{
			public override int GetOpnum()
			{
				return unchecked(0x15);
			}

			public int Retval;

			public string Servername;

			public int Level;

			public NdrObject Info;

			public ServerGetInfo(string servername, int level, NdrObject info)
			{
				this.Servername = servername;
				this.Level = level;
				this.Info = info;
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Encode_in(NdrBuffer dst)
			{
				dst.Enc_ndr_referent(Servername, 1);
				if (Servername != null)
				{
					dst.Enc_ndr_string(Servername);
				}
				dst.Enc_ndr_long(Level);
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Decode_out(NdrBuffer src)
			{
				src.Dec_ndr_long();
				int infop = src.Dec_ndr_long();
				if (infop != 0)
				{
					if (Info == null)
					{
						Info = new ServerInfo100();
					}
					src = src.Deferred;
					Info.Decode(src);
				}
				Retval = src.Dec_ndr_long();
			}
		}

		public class TimeOfDayInfo : NdrObject
		{
			public int Elapsedt;

			public int Msecs;

			public int Hours;

			public int Mins;

			public int Secs;

			public int Hunds;

			public int Timezone;

			public int Tinterval;

			public int Day;

			public int Month;

			public int Year;

			public int Weekday;

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Encode(NdrBuffer dst)
			{
				dst.Align(4);
				dst.Enc_ndr_long(Elapsedt);
				dst.Enc_ndr_long(Msecs);
				dst.Enc_ndr_long(Hours);
				dst.Enc_ndr_long(Mins);
				dst.Enc_ndr_long(Secs);
				dst.Enc_ndr_long(Hunds);
				dst.Enc_ndr_long(Timezone);
				dst.Enc_ndr_long(Tinterval);
				dst.Enc_ndr_long(Day);
				dst.Enc_ndr_long(Month);
				dst.Enc_ndr_long(Year);
				dst.Enc_ndr_long(Weekday);
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Decode(NdrBuffer src)
			{
				src.Align(4);
				Elapsedt = src.Dec_ndr_long();
				Msecs = src.Dec_ndr_long();
				Hours = src.Dec_ndr_long();
				Mins = src.Dec_ndr_long();
				Secs = src.Dec_ndr_long();
				Hunds = src.Dec_ndr_long();
				Timezone = src.Dec_ndr_long();
				Tinterval = src.Dec_ndr_long();
				Day = src.Dec_ndr_long();
				Month = src.Dec_ndr_long();
				Year = src.Dec_ndr_long();
				Weekday = src.Dec_ndr_long();
			}
		}

		public class RemoteTod : DcerpcMessage
		{
			public override int GetOpnum()
			{
				return unchecked(0x1c);
			}

			public int Retval;

			public string Servername;

			public TimeOfDayInfo Info;

			public RemoteTod(string servername, TimeOfDayInfo info)
			{
				this.Servername = servername;
				this.Info = info;
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Encode_in(NdrBuffer dst)
			{
				dst.Enc_ndr_referent(Servername, 1);
				if (Servername != null)
				{
					dst.Enc_ndr_string(Servername);
				}
			}

			/// <exception cref="SharpCifs.Dcerpc.Ndr.NdrException"></exception>
			public override void Decode_out(NdrBuffer src)
			{
				int infop = src.Dec_ndr_long();
				if (infop != 0)
				{
					if (Info == null)
					{
						Info = new TimeOfDayInfo();
					}
					Info.Decode(src);
				}
				Retval = src.Dec_ndr_long();
			}
		}
	}
}
